home *** CD-ROM | disk | FTP | other *** search
/ IRIS Performer 2.2 Friends Demo / SGI IRIS Performer 2.2 Friends Demo.iso / friends / openworlds / tix / FileEnt.tcl < prev    next >
Text File  |  1997-11-22  |  5KB  |  197 lines

  1. # TixFileEntry Widget
  2. #
  3. #    An entry box for entering filenames.
  4. #
  5. #
  6.  
  7. tixWidgetClass tixFileEntry {
  8.     -classname TixFileEntry
  9.     -superclass tixLabelWidget
  10.     -method {
  11.     invoke filedialog
  12.     }
  13.     -flag {
  14.     -command -dialogtype -disablecallback -disabledforeground -filebitmap
  15.     -state -validatecmd -value -variable
  16.     }
  17.     -forcecall {
  18.     -variable
  19.     }
  20.     -static {
  21.     -filebitmap
  22.     }
  23.     -configspec {
  24.     {-command command Command {}}
  25.     {-dialogtype dialogType DialogType {}}
  26.     {-disablecallback disableCallback DisableCallback false}
  27.     {-disabledforeground disabledForeground DisabledForeground #303030}
  28.     {-filebitmap fileBitmap FileBitmap [tix getbitmap openfile]}
  29.     {-state state State normal}
  30.     {-validatecmd validateCmd ValidateCmd {}}
  31.     {-value value Value {}}
  32.     {-variable variable Variable {}}
  33.     }
  34.     -default {
  35.     {*frame.borderWidth        2}
  36.     {*frame.relief            sunken}
  37.     {*Label.font                   -Adobe-Helvetica-Bold-R-Normal--*-120-*}
  38.     {*Button.highlightThickness    0}
  39.     {*Entry.highlightThickness    0}
  40.     {*Entry.borderWidth         0}
  41.     {*Entry.background         #c3c3c3}
  42.     }
  43. }
  44.  
  45. proc tixFileEntry::InitWidgetRec {w} {
  46.     upvar #0 $w data
  47.  
  48.     tixChainMethod $w InitWidgetRec
  49.     set data(varInited)      0
  50. }
  51.  
  52. proc tixFileEntry::ConstructFramedWidget {w frame} {
  53.     upvar #0 $w data
  54.  
  55.     tixChainMethod $w ConstructFramedWidget $frame
  56.  
  57.     set data(w:entry)  [entry  $frame.entry]
  58.     set data(w:button) [button $frame.button -bitmap $data(-filebitmap) \
  59.     -takefocus 0]
  60.     set data(entryfg) [$data(w:entry) cget -fg]
  61.  
  62.     pack $data(w:button) -side right -fill both
  63.     pack $data(w:entry)  -side left  -expand yes -fill both
  64. }
  65.  
  66. proc tixFileEntry::SetBindings {w} {
  67.     upvar #0 $w data
  68.  
  69.     tixChainMethod $w SetBindings
  70.  
  71.     $data(w:button) config -command "tixFileEntry::OpenFile $w"
  72.     tixSetMegaWidget $data(w:entry) $w
  73.  
  74.     # If user press <return>, verify the value and call the -command
  75.     #
  76.     bind $data(w:entry) <Return> "tixFileEntry::invoke $w"
  77.     bind $data(w:entry) <FocusOut>  {
  78.         if {"%d" == "NotifyNonlinear" || "%d" == "NotifyNonlinearVirtual"} {
  79.         tixFileEntry::invoke [tixGetMegaWidget %W]
  80.         }
  81.     }
  82.     bind $w <FocusIn> "focus $data(w:entry)"
  83. }
  84.  
  85. #----------------------------------------------------------------------
  86. #                           CONFIG OPTIONS
  87. #----------------------------------------------------------------------
  88. proc tixFileEntry::config-state {w value} {
  89.     upvar #0 $w data
  90.  
  91.     if {$value == "normal"} {
  92.     $data(w:button) config -state $value
  93.     $data(w:entry)  config -state $value -fg $data(entryfg)
  94.     $data(w:label)  config -fg $data(entryfg)
  95.     } else {
  96.     $data(w:button) config -state $value
  97.     $data(w:entry)  config -state $value -fg $data(-disabledforeground)
  98.     $data(w:label)  config -fg $data(-disabledforeground)
  99.     }
  100. }
  101.  
  102. proc tixFileEntry::config-value {w value} {
  103.     tixFileEntry::SetValue $w $value
  104. }
  105.  
  106. proc tixFileEntry::config-variable {w arg} {
  107.     upvar #0 $w data
  108.  
  109.     if [tixVariable:ConfigVariable $w $arg] {
  110.        # The value of data(-value) is changed if tixVariable:ConfigVariable 
  111.        # returns true
  112.        tixFileEntry::SetValue $w $data(-value)
  113.     }
  114.     catch {
  115.     unset data(varInited)
  116.     }
  117.     set data(-variable) $arg
  118. }
  119.  
  120. #----------------------------------------------------------------------
  121. #                         User Commands
  122. #----------------------------------------------------------------------
  123. proc tixFileEntry::invoke {w} {
  124.     upvar #0 $w data
  125.  
  126.     if {[catch {$data(w:entry) index sel.first}] == 0} {
  127.     # THIS ENTRY OWNS SELECTION --> TURN IT OFF
  128.     #
  129.     $data(w:entry) select from end
  130.     $data(w:entry) select to   end
  131.     }
  132.  
  133.     tixFileEntry::SetValue $w [$data(w:entry) get]
  134. }
  135.  
  136. proc tixFileEntry::filedialog {w} {
  137.     upvar #0 $w data
  138.  
  139.     return [tix filedialog $data(-dialogtype)]
  140. }
  141.  
  142. #----------------------------------------------------------------------
  143. #                       Internal Commands
  144. #----------------------------------------------------------------------
  145. proc tixFileEntry::OpenFile {w} {
  146.      upvar #0 $w data
  147.  
  148.      set filedlg [tix filedialog $data(-dialogtype)]
  149.  
  150.      $filedlg config -parent [winfo toplevel $w] \
  151.      -command "tixFileEntry::FileDlgCallback $w"
  152.  
  153.      focus $data(w:entry)
  154.  
  155.      $filedlg popup
  156. }
  157.  
  158. proc tixFileEntry::FileDlgCallback {w filename} {
  159.     tixFileEntry::SetValue $w $filename
  160. }
  161.  
  162. proc tixFileEntry::SetValue {w value} {
  163.     upvar #0 $w data
  164.  
  165.     if {$data(-validatecmd) != {}} {
  166.     set value [eval $data(-validatecmd) [list $value]]
  167.     }
  168.  
  169.     if {$data(-state) == "normal"} {
  170.     $data(w:entry) delete 0 end
  171.     $data(w:entry) insert 0 $value
  172.     $data(w:entry) xview end
  173.     }
  174.  
  175.     set data(-value) $value
  176.  
  177.     tixVariable:UpdateVariable $w
  178.  
  179.     if {$data(-command) != {} &&
  180.     ![tixGetBoolean -nocomplain $data(-disablecallback)]} {
  181.     if {![info exists data(varInited)]} {
  182.         eval $data(-command) [list $value]
  183.     }
  184.     }
  185. }
  186.  
  187. proc tixFileEntry::Destructor {w} {
  188.     upvar #0 $w data
  189.  
  190.     tixUnsetMegaWidget $data(w:entry)
  191.     tixVariable:DeleteVariable $w
  192.  
  193.     # Chain this to the superclass
  194.     #
  195.     tixChainMethod $w Destructor
  196. }
  197.